package com.ruifu.act.service;

import com.fhzncloud.cloud.common.core.util.PageR;
import com.fhzncloud.cloud.common.core.util.R;
import com.ruifu.act.dto.ModelDto;
import com.ruifu.act.vo.ProcessDefinitionVO;
import com.ruifu.common.vo.ResultVO;
import org.activiti.engine.repository.Model;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * ClassName: ProcessModelService <br/>
 * Description: <br/>
 * date: 2020-5-7-0007 16:56<br/>
 *
 * @author liun<br />
 * @since JDK 1.8
 */
public interface ProcessModelService {


    /**
     * 查询指定条件下，该账号账套下对应的模型是否存在
     *
     * @param modelName
     * @param modelKey
     * @param tenantId
     * @return
     */
    R<Boolean> verifyModelIsExist(String modelName, String modelKey, String tenantId);

    /**
     * 根据账套id分页查询流程模板
     *
     * @param tenantId
     * @param pageNum
     * @param sizeNum
     * @return
     */
    PageR<List<Model>> queryModelListByTenantId(String tenantId, Integer pageNum, Integer sizeNum);

    /**
     * 根据账套id分页查询最新版本的流程定义
     *
     * @param tenantId
     * @param pageNum  开始条数
     * @param sizeNum  结束条数
     * @return
     */
    PageR<List<ProcessDefinitionVO>> queryProcessDefinitionByTenantId(String tenantId, Integer pageNum, Integer sizeNum);

    /**
     * 初始化一个空的流程模板，并返回对应的模板id
     *
     * @param modelDto
     * @return
     */
    String initEmptyModel(ModelDto modelDto, String tenantId);

    /**
     * 根据modelid从流程模板中部署发布一个流程定义
     *
     * @param modelId
     * @return
     */
    R deployModel(String modelId);

    /**
     * 将对应流程模板输出。xml格式
     *
     * @param request
     * @param response
     * @param modelId
     */
    void exportModelToXml(HttpServletRequest request, HttpServletResponse response, String modelId);


    /**
     * 批量删除key值相同的所有版本的流程定义
     *
     * @param processDefinitionKeyList
     * @return
     */
    ResultVO deleteProcessDefinition(List<String> processDefinitionKeyList);

    /**
     * 从默认账套的模板数据中拷贝模板信息到新的账套进行初始化
     *
     * @param sourceTenantId
     * @param targetTenantId
     * @return
     */
    Boolean tenantTemplateCopy(Integer sourceTenantId, Integer targetTenantId);

}
